class Fileutils:
    def __init__(self,path):
        self.path=path

    def fileutile1(self): #处理文本数据：输出一个二维列表[['省份','城市','数量']]
        yq_All=[]
        Ofile=open(self.path,'r',encoding='utf-8')
        with Ofile as f:
            yq=[line.split() for line in f]
        for msd_id,yq_type,yq_data in yq:
            yq_All.append([msd_id,yq_type,yq_data]) 
        return yq_All

    def getPart(self):  #按输出一个三维列表[[['城市','数量']]]
        S=self.fileutile1()
        province2=S[0][0]
        Part=[]
        X=[]
        for i in range(0,len(S)):
                if(S[i][0]==province2):
                    X.append([S[i][1],S[i][2]])
                else:
                    X1=sorted(X,key=(lambda x:int(x[1])),reverse=True) #按照每个省每个城市的数量降序排序
                    Part.append(X1)
                    X.clear()
                    province2=S[i][0]
        return Part

    def Sum(self):     #输出按'总数量'降序排列的二维列表['省份','总数量','原出现顺序']
        ALL=self.fileutile1()
        p=ALL[0][0]
        sum1=[]
        sum2=0
        j=0
        for i in range(len(ALL)):
            if ALL[i][0]==p:
                sum2+=int(ALL[i][2]) #计算每个省的总数量
            else:
                sum1.append([p,sum2,j]) #j为原出现顺序
                sum2=0
                p=ALL[i][0]
                j+=1
        sum1=sorted(sum1,key=(lambda x:int(x[1])),reverse=True) #按照每个省总数量降序排序
        return sum1

    def Printf(self,Inpath='yq_in.txt',Outpath='yq_out.txt',province=' '): #处理输出
        self.path=Inpath                                                   #不指定文件时设置有默认参数，指定文件传入参数时将被覆盖
        t=open(Outpath,'w',encoding='utf-8')
        Part=self.getPart()
        All=self.Sum()
        if province==' ':                        #省份缺省
            for i in range(0,len(All)):
                x=All[i][2]
                t.write(All[i][0]+'\t'+'总数量：'+str(All[i][1])+'\t'+'城市总数：'+str(len(Part[x]))+'\n')
                for j in range(0,len(Part[x])): 
                    t.write(Part[x][j][0]+'\t'+Part[x][j][1]+'\n')
                t.write('\n')
        else:                                  #指定省份
            for i in range(0,len(All)):
                if province==All[i][0]:
                    x=All[i][2]
                    t.write(All[i][0]+'\t'+'总数量：'+str(All[i][1])+'\t'+'城市总数：'+str(len(Part[x]))+'\n')
                for j in range(0,len(Part[x])): 
                    t.write(Part[x][j][0]+'\t'+Part[x][j][1]+'\n')   
                break

def test():                        #测试,不需要指定文件或指定省份时可跳过该输入
    X=Fileutils('yq_in.txt')
    x=input("输入读入文件：")
    y=input("输入写入文件：")
    z=input("输入指定省份：")
    if x!='' and y!='':
        if z!='':
            X.Printf(x,y,z)
        else:
            X.Printf(x,y)
    else:
        if z!='':
            X.Printf(province=z)
        else:
            X.Printf()
test()
